package com.yg.edu.atomic;

import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;

/**
 * @author ：图灵-杨过
 * @date：2019/7/14
 * @version: V1.0
 * @slogan: 天下风云出我辈，一入代码岁月催
 * @description :
 */
public class AtomicIntegerFieldUpdateRunner {

    static AtomicIntegerFieldUpdater aifu = AtomicIntegerFieldUpdater.newUpdater(Student.class, "old");

    /**
     * 逻辑： 针对对象类字段的并发操作，自增赋值处理。
     * getAndIncrement 作用：先get到值后，再做set加1赋值操作。
     *
     * 所以先得到18再+1，19后再+1；
     * <p>
     * 输出内容： 18、19、20
     *
     * @param args
     * @return void
     * @author fwh [2022/2/19 && 5:47 下午]
     */
    public static void main(String[] args) {
        Student stu = new Student("杨过", 18);
        System.out.println(aifu.getAndIncrement(stu));
        System.out.println(aifu.getAndIncrement(stu));
        System.out.println(aifu.get(stu));
    }

    static class Student {
        private String name;
        public volatile int old;

        public Student(String name, int old) {
            this.name = name;
            this.old = old;
        }

        public String getName() {
            return name;
        }

        public int getOld() {
            return old;
        }
    }

}
